package com.链表;



import java.util.Stack;

/**
 * 给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点。
 *
 * 示例：
 *
 * 给定一个链表: 1->2->3->4->5, 和 n = 2.
 *
 * 当删除了倒数第二个节点后，链表变为 1->2->3->5.
 * 说明：
 *
 * 给定的 n 保证是有效的。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 删除链表的倒数第N个节点 {
   static class Solution {
       /**
        * 删除倒数的n个结点就是删除正数的的 leng-n+1 个结点
        *
        * @param head
        * @param n
        * @return
        */
       public ListNode removeNthFromEnd(ListNode head, int n) {
          ListNode dummy = new ListNode(-1);
          dummy.next = head;
          ListNode fast = dummy;
          int len = 0;
          while (fast != null){
              len++;
              fast = fast.next;
          }
          int del = len-n-1;
          fast = dummy;
          while (del > 0){
              del--;
              fast = fast.next;
          }
         fast.next = fast.next.next;
          return dummy.next;
   }}
    public static void main(String[] args) {
        Solution solution = new Solution();
        ListNode head = new ListNode(new int[]{1,2,3,4,5});
        solution.removeNthFromEnd(head,1);
    }}

